package drupal

// DrupalNode 定义了 Drupal JSON API 的节点数据结构
type DrupalNode struct {
	Data struct {
		// Type 表示节点的类型，例如 "node--article"
		Type string `json:"type"`

		// Attributes 包含节点的核心属性，使用 map 动态存储字段
		Attributes map[string]interface{} `json:"attributes"`

		// Relationships 包含节点与其他实体的关联关系，使用 map 动态存储字段
		Relationships map[string]interface{} `json:"relationships"`
	} `json:"data,omitempty"`
}

// DrupalNodeBuilder 是建造者模式的接口
type DrupalNodeBuilder interface {
	SetType(nodeType string) DrupalNodeBuilder
	SetAttributes(key string, value interface{}) DrupalNodeBuilder
	SetRelationships(key string, value interface{}) DrupalNodeBuilder
	Build() DrupalNode
}

// drupalNodeBuilder 是 DrupalNodeBuilder 的具体实现
type drupalNodeBuilder struct {
	node DrupalNode
}

// NewDrupalNodeBuilder 初始化一个新的建造者
func NewDrupalNodeBuilder() DrupalNodeBuilder {
	builder := &drupalNodeBuilder{}
	builder.node.Data.Attributes = make(map[string]interface{})
	builder.node.Data.Relationships = make(map[string]interface{})
	return builder
}

// SetType 设置节点类型
func (b *drupalNodeBuilder) SetType(nodeType string) DrupalNodeBuilder {
	b.node.Data.Type = nodeType
	return b
}

// SetAttributes 设置节点属性
func (b *drupalNodeBuilder) SetAttributes(key string, value interface{}) DrupalNodeBuilder {
	b.node.Data.Attributes[key] = value
	return b
}

// SetRelationships 设置节点关联关系
func (b *drupalNodeBuilder) SetRelationships(key string, value interface{}) DrupalNodeBuilder {
	b.node.Data.Relationships[key] = value
	return b
}

// Build 返回构建完成的 DrupalNode
func (b *drupalNodeBuilder) Build() DrupalNode {
	return b.node
}
